describe('API 接口测试', () => {
  const apiBaseUrl = Cypress.env('api_base_url');

  describe('图书管理 API', () => {
    it('应该能够获取图书列表', () => {
      cy.request('GET', `${apiBaseUrl}/api/books`)
        .then((response) => {
          expect(response.status).to.eq(200);
          expect(response.body).to.have.property('data');
          expect(response.body.data).to.be.an('array');
        });
    });

    it('应该能够搜索图书', () => {
      cy.request('GET', `${apiBaseUrl}/api/books/search?q=Java`)
        .then((response) => {
          expect(response.status).to.eq(200);
          expect(response.body.data).to.be.an('array');
          
          // 验证搜索结果包含关键词
          response.body.data.forEach((book: any) => {
            expect(book.title.toLowerCase()).to.include('java');
          });
        });
    });

    it('应该能够获取图书详情', () => {
      cy.request('GET', `${apiBaseUrl}/api/books/1`)
        .then((response) => {
          expect(response.status).to.eq(200);
          expect(response.body.data).to.have.property('id');
          expect(response.body.data).to.have.property('title');
          expect(response.body.data).to.have.property('author');
        });
    });

    it('应该能够借阅图书', () => {
      const borrowData = {
        bookId: 1,
        userId: 'test-user',
        borrowDays: 7
      };

      cy.request('POST', `${apiBaseUrl}/api/books/borrow`, borrowData)
        .then((response) => {
          expect(response.status).to.eq(200);
          expect(response.body).to.have.property('success', true);
        });
    });
  });

  describe('用户管理 API', () => {
    it('应该能够用户登录', () => {
      const loginData = {
        username: 'testuser',
        password: 'testpass'
      };

      cy.request('POST', `${apiBaseUrl}/api/auth/login`, loginData)
        .then((response) => {
          expect(response.status).to.eq(200);
          expect(response.body).to.have.property('token');
        });
    });

    it('应该能够获取用户信息', () => {
      // 先登录获取 token
      cy.request('POST', `${apiBaseUrl}/api/auth/login`, {
        username: 'testuser',
        password: 'testpass'
      }).then((loginResponse) => {
        const token = loginResponse.body.token;

        // 使用 token 获取用户信息
        cy.request({
          method: 'GET',
          url: `${apiBaseUrl}/api/user/profile`,
          headers: {
            'Authorization': `Bearer ${token}`
          }
        }).then((response) => {
          expect(response.status).to.eq(200);
          expect(response.body.data).to.have.property('username');
        });
      });
    });
  });

  describe('错误处理测试', () => {
    it('应该正确处理 404 错误', () => {
      cy.request({
        method: 'GET',
        url: `${apiBaseUrl}/api/books/999999`,
        failOnStatusCode: false
      }).then((response) => {
        expect(response.status).to.eq(404);
        expect(response.body).to.have.property('error');
      });
    });

    it('应该正确处理无效请求', () => {
      cy.request({
        method: 'POST',
        url: `${apiBaseUrl}/api/books/borrow`,
        body: { invalid: 'data' },
        failOnStatusCode: false
      }).then((response) => {
        expect(response.status).to.eq(400);
        expect(response.body).to.have.property('error');
      });
    });
  });
});